/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.validar.noticia;

import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import uy.edu.ort.dominio.Fuente;
import uy.edu.ort.dominio.ManejoJSON;
import uy.edu.ort.dominio.Noticia;
import uy.edu.ort.validar.servicios.ManejoArchivos;

/**
 *
 * @author Gonza
 */
@Stateless
public class ValidarNoticiaSB implements ValidarNoticiaSBLocal {

    static org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(ValidarNoticiaSB.class);
    //Inyección de dependencia
    @EJB
    
    private ValidarFuenteSBLocal vdLocal;   
    
    
    @Override
    public void validarNoticia(String noticia) {
        //Se hacen los chequeos que la noticia sea valida y se guarda en txt como aceptada o rechazada y poner motivo de rechazo.
        //Si es valida se envia a publicar por JMS

        //aca paso el json a objeto Noticia y valido los campos con los get
        ManejoArchivos archivo = new ManejoArchivos();
        
        boolean notiValida;
        ManejoJSON mj = new ManejoJSON();
        Noticia noti = new Noticia();
        noti = mj.JSONToNoticia(noticia);
        Fuente fNot = new Fuente(Long.valueOf(noti.getIdFuente()), noti.getCodAutorizacion());
        //Valido la fuente de la noticia
        
        boolean fAutorizada = vdLocal.ValidarFuente(mj.ObjetoToJSON(fNot));
        //Valido el resto de los campos de la noticia
        boolean tituloVacio = noti.getTitulo().isEmpty();
        boolean contenidoVacio = noti.getContenido().isEmpty();
        boolean topicoVacio = noti.getTopico().isEmpty();

        notiValida = fAutorizada && !tituloVacio && !contenidoVacio && !topicoVacio;


        //----------------------------------------------------------------------------------
        if (notiValida){
            System.out.println("LLego noticia ValidarNoticiaSB " + noticia);

            try {
                //Seteo las Properties para el contexto
                Properties props = new Properties();
                props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
                props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
                props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
                props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
                props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
                //Creo el Contexto para obtener los recursos del servidor
                InitialContext ic = new InitialContext(props);
                // Obtenemos a traves del servicio JNDI la ConnectionFactory del
                // servidor de aplicaciones
                ConnectionFactory connectionFactory = (ConnectionFactory) ic.lookup("CF01");
                // Obtenemos a traves del servicio JNDI la "destination" que vamos
                // a utilizar, en este caso una Queue
                Queue queue = (Queue) ic.lookup("jms/QueuePublicarNoticia");
                //Creo la Connection mediante la ConnectionFactory
                Connection connection = connectionFactory.createConnection();
                //Creo la Session mediante la Connection
                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                //Creo la MessageProducer mediante la Session
                MessageProducer messageProducer = session.createProducer(queue);
                //Creo la TextMessage mediante la Session
                TextMessage textMessage = session.createTextMessage();
                textMessage.setText(noticia);
                //Envío el mensaje mediante MessageProducer
                messageProducer.send(textMessage);

                //FIXME: Ver si va.
                connection.close();
                
                String retorno = "Noticia ACEPTADA: " + noticia;
                archivo.GuardarNoticiaEnArchivo(noticia + " ACEPTADA");
                //aca tengo que guardar la noticia como ACEPTADA
                logger.info(retorno);

            } catch (Exception ex) {
                Logger.getLogger(ValidarNoticiaSB.class.getName()).log(Level.SEVERE, null, ex);
                logger.error(ex.toString());
            }
        }
        else{
            String motivoRechazo = "RECHAZADA:";
            if (!fAutorizada){
                motivoRechazo = motivoRechazo + " Fuente no autorizada.";
            }
            if (tituloVacio){
                motivoRechazo = motivoRechazo + " Titulo vacio.";
            }
            if (contenidoVacio){
                motivoRechazo = motivoRechazo + " Contenido vacio.";
            }
            if (topicoVacio){
                motivoRechazo = motivoRechazo + " Topico vacio.";
            }
            String retorno = "Noticia RECHAZADA: " + noticia;
            archivo.GuardarNoticiaEnArchivo(noticia + motivoRechazo);
            //aca tengo que guardar la noticia como RECHAZADA
            logger.error(retorno);
        }

    }
}
